/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI.Cadastro;

import Facade.Facade;
import Objetos.Usuario;
import Objetos.Funcionario;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.ParseException;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author celio
 */
public final class CadastroFuncionario extends JPanel {

    JLabel nome, cpf, telefone, tipo;
    JFormattedTextField tCpf, tTelefone;
    MaskFormatter mascaraCpf, mascaraTelefone;
    JTextField tNome;
    JComboBox tTipo;
    JButton cadastrar, alterar, limpar, sair;
    Facade fa;
    Funcionario func;
    JTable objetos;
    JScrollPane scroller;
    Calendar data;
    String tipos[] = {" ", "Preparador", "Pintor", "Polidor", "Lanterneiro"};

    public CadastroFuncionario(final Usuario usu) {

        JLabel tela = new JLabel("... :::   Cadastro de Funcionário   ::: ...");
        tela.setBounds(400, 10, 500, 20);
        add(tela);

        data = Calendar.getInstance();
       
        nome = new JLabel("Nome: ");
        tNome = new JTextField(40);

        cpf = new JLabel("CPF: ");
        try {
            mascaraCpf = new MaskFormatter("###.###.###-##");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }
        tCpf = new JFormattedTextField(mascaraCpf);

        telefone = new JLabel("Telefone: ");

        try {
            mascaraTelefone = new MaskFormatter("(##)####-####");
        } catch (ParseException ex) {
            Logger.getLogger(CadastroFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }
        tTelefone = new JFormattedTextField(mascaraTelefone);

        tipo = new JLabel("Tipo: ");
        tTipo = new JComboBox(tipos);

        cadastrar = new JButton("Cadastrar");
        alterar = new JButton("Alterar");
        limpar = new JButton("Limpar");
        sair = new JButton("Sair");

        nome.setBounds(10, 50, 100, 20);
        tNome.setBounds(70, 50, 120, 20);

        cpf.setBounds(10, 80, 60, 20);
        tCpf.setBounds(70, 80, 100, 20);

        telefone.setBounds(10, 110, 60, 20);
        tTelefone.setBounds(70, 110, 100, 20);

        tipo.setBounds(10, 140, 60, 20);
        tTipo.setBounds(70, 140, 100, 20);

        cadastrar.setBounds(20, 200, 100, 20);
        alterar.setBounds(350, 450, 100, 20);
        limpar.setBounds(120, 200, 100, 20);
        sair.setBounds(220, 200, 100, 20);

        add(nome);
        add(tNome);

        add(cpf);
        add(tCpf);

        add(telefone);
        add(tTelefone);

        add(tipo);
        add(tTipo);

        add(cadastrar);
        add(alterar);
        add(limpar);
        add(sair);

        alterar.setEnabled(false);
        atualizaTabela(usu);

        cadastrar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                func = new Funcionario();
                fa = new Facade();
                if (tNome.getText().equalsIgnoreCase("") || tTipo.getSelectedIndex() == 0) {

                    JOptionPane.showMessageDialog(null, "Preencha os campos necessários");
                } else {
                    func.setNome(tNome.getText());
                    func.setNumeroCadastro(tCpf.getText());
                    func.setTelefone(tTelefone.getText());
                    func.setTipo(tTipo.getSelectedItem().toString());
                    func.setData_inclusao(Funcoes.funcoes.paraInserirData(data.getTime().toLocaleString().substring(0, 10)));
                    fa.inserirFuncionario_Funcionario(func, usu);

                    tNome.setText("");
                    tCpf.setText("");
                    tTelefone.setText("");
                    tTipo.setSelectedIndex(0);
                    atualizaTabela(usu);

                }
            }

        }
        );
        
        objetos.addMouseListener(new MouseListener() {

            @Override
            public void mouseClicked(MouseEvent e) {
            
                fa = new Facade();
                Funcionario antes = fa.procurarFuncionario_Funcionario(objetos.getValueAt(objetos.getSelectedRow(),0).toString(),usu);
                tNome.setText(antes.getNome());
                tCpf.setText(antes.getNumeroCadastro());
                tTelefone.setText(antes.getTelefone());
                cadastrar.setEnabled(false);
                alterar.setEnabled(true);
                
            }

            @Override
            public void mousePressed(MouseEvent e) {
               }

            @Override
            public void mouseReleased(MouseEvent e) {
             }

            @Override
            public void mouseEntered(MouseEvent e) {
                  }

            @Override
            public void mouseExited(MouseEvent e) {
               }
        });

        limpar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                tNome.setText("");
                tCpf.setText("");
                tTelefone.setText("");
                tTipo.setSelectedIndex(0);
                alterar.setEnabled(false);
                cadastrar.setEnabled(true);

            }
        });

        alterar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                
                fa = new Facade();
                Funcionario antes = fa.procurarFuncionario_Funcionario(objetos.getValueAt(objetos.getSelectedRow(),0).toString(),usu);
                
                Funcionario depois = new Funcionario();
                if (tNome.getText().equalsIgnoreCase("") || tTipo.getSelectedIndex() == 0) {

                    JOptionPane.showMessageDialog(null, "Preencha os campos necessários");
                } else {
                    depois.setNome(tNome.getText());
                    depois.setNumeroCadastro(tCpf.getText());
                    depois.setTelefone(tTelefone.getText());
                    depois.setTipo(tTipo.getSelectedItem().toString());
                    depois.setData_inclusao(Funcoes.funcoes.paraInserirData(data.getTime().toLocaleString().substring(0, 10)));
                    fa.alterarFuncionario_Funcionario(antes, depois,usu);

                    tNome.setText("");
                    tCpf.setText("");
                    tTelefone.setText("");
                    tTipo.setSelectedIndex(0);
                    atualizaTabela(usu);
                    alterar.setEnabled(false);
                    cadastrar.setEnabled(true);

                }
            }
        });

        sair.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                setVisible(false);
            }
        });

        setLayout(null);
        setBackground(Color.LIGHT_GRAY);
        setBorder(BorderFactory.createBevelBorder(1, Color.DARK_GRAY, Color.DARK_GRAY));
        setSize(800, 600);
        setVisible(true);
        revalidate();
        repaint();
    }

    public void atualizaTabela(Usuario usu) {

        try {
            remove(scroller);

        } catch (NullPointerException e) {
        }
        fa = new Facade();
        objetos = fa.listarTodos_Funcionario(usu);
        objetos.setFont(new Font("Times New Roman", Font.BOLD, 14));
        scroller = new JScrollPane(objetos, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroller.setBounds(350, 50, 720, 400);
        add(scroller);
    }
}
